package com.ohuang.test_spi;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ServiceLoader;

public class SPIUtils {
    /**
     * 如果有多个实现，取第一个
     */
    public static <T> T getSpiImpl(Class<T> t) {
        try {
            ServiceLoader<T> loader = ServiceLoader.load(t, t.getClassLoader());
            Iterator<T> iter = loader.iterator();
            if (iter.hasNext()) {
                return iter.next();
            }
        } catch (Exception e) {
            //
        }
        return null;
    }
    /**
     * 返回所有实现
     */
    public static <T> List<T> getSpiImpls(Class<T> t) {
        List<T> impls = new ArrayList<>();
        try {
            ServiceLoader<T> loader = ServiceLoader.load(t, t.getClassLoader());
            Iterator<T> iter = loader.iterator();
            while (iter.hasNext()) {
                impls.add(iter.next());
            }
        } catch (Exception e) {
            //
        }
        return impls;
    }
}
